package com.zy.ems.common.util;

import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

/**
 * 正则表达式验证工具类。
 * 
 * @author Luffy
 *
 */
public class RegexUtils {

    /**
     * 校验密码的长度是否是6-16位。
     * 
     * @param password
     * @return
     */
    public static boolean checkPasswordLength(String password) {
        return match(password, "^.{6,16}$");
    }

    /**
     * 判断字符串是否为日期格式。
     * 
     * @param strDate
     * @return
     */
    public static boolean isDate(String strDate) {
        return match(strDate,
                "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?{1}");
    }

    /**
     * 手机号码验证。
     * 
     * @param mobile
     * @return
     */
    public static boolean isMobileNumber(String mobile) {
        return match(mobile,
                "^((13[0-9])|(14[5,7])|(15[^4,\\D])|(17[0-9])|(18[0-9]))\\d{8}$");
    }

    /**
     * 判断字符串是否为数字。
     * 
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        return match(str, "[0-9]*");
    }

    /**
     * 正则表达式匹配
     * 
     * @param text
     *            待匹配的文本
     * @param reg
     *            正则表达式
     * @return
     * 
     */
    private final static boolean match(String text, String reg) {
        if (StringUtils.isBlank(text) || StringUtils.isBlank(reg)) {
            return false;
        }
        return Pattern.compile(reg).matcher(text).matches();
    }
}
